<p>The Trilium Metrics API provides comprehensive monitoring data about your
  Trilium instance, designed for external monitoring systems like Prometheus.</p>
<h2><strong>Endpoint</strong></h2>
<ul>
  <li><strong>URL</strong>: <code>/etapi/metrics</code>
  </li>
  <li><strong>Method</strong>: <code>GET</code>
  </li>
  <li><strong>Authentication</strong>: ETAPI token required</li>
  <li><strong>Default Format</strong>: Prometheus text format</li>
</ul>
<h2><strong>Authentication</strong></h2>
<p>You need an ETAPI token to access the metrics endpoint. Get one by:</p><pre><code class="language-text-x-trilium-auto"># Get an ETAPI token
curl -X POST http://localhost:8080/etapi/auth/login \
  -H "Content-Type: application/json" \
  -d '{"password": "your_password"}'
</code></pre>
<h2><strong>Usage</strong></h2>
<h3><strong>Prometheus Format (Default)</strong></h3><pre><code class="language-text-x-trilium-auto">curl -H "Authorization: YOUR_ETAPI_TOKEN" \
  http://localhost:8080/etapi/metrics
</code></pre>
<p>Returns metrics in Prometheus text format:</p><pre><code class="language-text-x-trilium-auto"># HELP trilium_info Trilium instance information
# TYPE trilium_info gauge
trilium_info{version="0.91.6",db_version="231",node_version="v18.17.0"} 1 1701432000

# HELP trilium_notes_total Total number of notes including deleted
# TYPE trilium_notes_total gauge
trilium_notes_total 1234 1701432000
</code></pre>
<h3><strong>JSON Format</strong></h3><pre><code class="language-text-x-trilium-auto">curl -H "Authorization: YOUR_ETAPI_TOKEN" \
  "http://localhost:8080/etapi/metrics?format=json"
</code></pre>
<p>Returns detailed metrics in JSON format for debugging or custom integrations.</p>
<h2><strong>Available Metrics</strong></h2>
<h3><strong>Instance Information</strong></h3>
<ul>
  <li><code>trilium_info</code> - Version and build information with labels</li>
</ul>
<h3><strong>Database Metrics</strong></h3>
<ul>
  <li><code>trilium_notes_total</code> - Total notes (including deleted)</li>
  <li><code>trilium_notes_deleted</code> - Number of deleted notes</li>
  <li><code>trilium_notes_active</code> - Number of active notes</li>
  <li><code>trilium_notes_protected</code> - Number of protected notes</li>
  <li><code>trilium_attachments_total</code> - Total attachments</li>
  <li><code>trilium_attachments_active</code> - Active attachments</li>
  <li><code>trilium_revisions_total</code> - Total note revisions</li>
  <li><code>trilium_branches_total</code> - Active branches</li>
  <li><code>trilium_attributes_total</code> - Active attributes</li>
  <li><code>trilium_blobs_total</code> - Total blob records</li>
  <li><code>trilium_etapi_tokens_total</code> - Active ETAPI tokens</li>
  <li><code>trilium_embeddings_total</code> - Note embeddings (if available)</li>
</ul>
<h3><strong>Categorized Metrics</strong></h3>
<ul>
  <li><code>trilium_notes_by_type{type="text|code|image|file"}</code> - Notes
    by type</li>
  <li><code>trilium_attachments_by_type{mime_type="..."}</code> - Attachments
    by MIME type</li>
</ul>
<h3><strong>Statistics</strong></h3>
<ul>
  <li><code>trilium_database_size_bytes</code> - Database size in bytes</li>
  <li><code>trilium_oldest_note_timestamp</code> - Timestamp of oldest note</li>
  <li><code>trilium_newest_note_timestamp</code> - Timestamp of newest note</li>
  <li><code>trilium_last_modified_timestamp</code> - Last modification timestamp</li>
</ul>
<h2><strong>Prometheus Configuration</strong></h2>
<p>Add to your <code>prometheus.yml</code>:</p><pre><code class="language-text-x-trilium-auto">scrape_configs:
  - job_name: 'trilium'
    static_configs:
      - targets: ['localhost:8080']
    metrics_path: '/etapi/metrics'
    bearer_token: 'YOUR_ETAPI_TOKEN'
    scrape_interval: 30s
</code></pre>
<h2><strong>Error Responses</strong></h2>
<ul>
  <li><code>400</code> - Invalid format parameter</li>
  <li><code>401</code> - Missing or invalid ETAPI token</li>
  <li><code>500</code> - Internal server error</li>
</ul>
<h2><strong>Grafana Dashboard</strong></h2>
<figure class="image">
  <img style="aspect-ratio:2594/1568;" src="1_Metrics_image.png" width="2594"
  height="1568">
</figure>
<p>You can also use the Grafana Dashboard that has been created for TriliumNext
  - just take the JSON from&nbsp;<a class="reference-link" href="#root/_help_bOP3TB56fL1V">grafana-dashboard.json</a>&nbsp;and
  then import the dashboard, following these screenshots:</p>
<figure class="image">
  <img style="aspect-ratio:1881/282;" src="2_Metrics_image.png" width="1881"
  height="282">
</figure>
<p>Then paste the JSON, and hit load:</p>
<figure class="image">
  <img style="aspect-ratio:1055/830;" src="Metrics_image.png" width="1055"
  height="830">
</figure>